import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',  // 添加/api前缀，以便通过nginx代理
  timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.token = token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    return response  // 返回完整的响应对象，而不是只返回response.data
  },
  error => {
    const msg = error.response?.data?.msg || error.message || '网络请求失败'
    ElMessage.error(msg)
    
    if (error.response?.status === 401) {
      localStorage.removeItem('token')
      location.href = '/login'
    }
    
    return Promise.reject(error)
  }
)

/**
 * 订单管理模块API
 */
export default {
  /**
   * 取消订单
   * @param {Object} params 取消订单参数
   * @param {number} params.id 订单id
   * @param {string} params.cancelReason 取消原因
   */
  cancelOrder(params) {
    return request({
      url: '/admin/order/cancel',
      method: 'put',
      data: params
    }).then(response => response.data)
  },

  /**
   * 各个状态的订单数量统计
   */
  getOrderStatistics() {
    return request({
      url: '/admin/order/statistics',
      method: 'get'
    }).then(response => response.data)
  },

  /**
   * 完成订单
   * @param {number} id 订单id
   */
  completeOrder(id) {
    return request({
      url: `/admin/order/complete/${id}`,
      method: 'put'
    }).then(response => response.data)
  },

  /**
   * 拒单
   * @param {Object} params 拒单参数
   * @param {number} params.id 订单id
   * @param {string} params.rejectionReason 拒单原因
   */
  rejectOrder(params) {
    return request({
      url: '/admin/order/rejection',
      method: 'put',
      data: params
    }).then(response => response.data)
  },

  /**
   * 接单
   * @param {Object} params 接单参数
   * @param {number} params.id 订单id
   */
  confirmOrder(params) {
    return request({
      url: '/admin/order/confirm',
      method: 'put',
      data: params
    }).then(response => response.data)
  },

  /**
   * 接单 (别名方法)
   * @param {Object} params 接单参数
   * @param {number} params.id 订单id
   */
  confirm(params) {
    return this.confirmOrder(params)
  },

  /**
   * 查询订单详情
   * @param {number} id 订单id
   */
  getOrderDetail(id) {
    console.log('调用getOrderDetail API，订单ID:', id)
    return request({
      url: `/admin/order/details/${id}`,
      method: 'get'
    }).then(res => {
      console.log('订单详情API响应:', res)
      return res.data  // 返回response.data
    }).catch(err => {
      console.error('订单详情API错误:', err)
      throw err
    })
  },

  /**
   * 查询订单详情 (别名方法，兼容现有代码)
   * @param {number} id 订单id
   */
  details(id) {
    return this.getOrderDetail(id)
  },

  /**
   * 派送订单
   * @param {number} id 订单id
   */
  deliverOrder(id) {
    return request({
      url: `/admin/order/delivery/${id}`,
      method: 'put'
    }).then(response => response.data)
  },

  /**
   * 派送订单 (别名方法)
   * @param {number} id 订单id
   */
  delivery(id) {
    return this.deliverOrder(id)
  },

  /**
   * 拒单 (别名方法)
   * @param {Object} params 拒单参数
   */
  rejection(params) {
    return this.rejectOrder(params)
  },

  /**
   * 取消订单 (别名方法)
   * @param {Object} params 取消订单参数
   */
  cancel(params) {
    return this.cancelOrder(params)
  },

  /**
   * 完成订单 (别名方法)
   * @param {number} id 订单id
   */
  complete(id) {
    return this.completeOrder(id)
  },

  /**
   * 订单搜索/分页查询
   * @param {Object} params 查询参数
   * @param {string} [params.number] 订单号
   * @param {string} [params.phone] 手机号
   * @param {string} [params.beginTime] 开始时间
   * @param {string} [params.endTime] 结束时间
   * @param {number} [params.status] 订单状态
   * @param {number} params.page 页码
   * @param {number} params.pageSize 每页记录数
   */
  searchOrders(params) {
    return request({
      url: '/admin/order/conditionSearch',
      method: 'get',
      params
    }).then(response => response.data)
  }
} 